/*
 * File:   BombaPlantaTest.cpp
 * Author: jaschu
 *
 * Created on 28-may-2014, 1:22:07
 */

#include "BombaPlantaTest.h"
#include "../BombaPlanta.h"
#include "../ZombieVerde.h"
#include "../Caja.h"
#include <iostream>

using std::cout;
using std::endl;

CPPUNIT_TEST_SUITE_REGISTRATION(BombaPlantaTest);

BombaPlantaTest::BombaPlantaTest() {
}

BombaPlantaTest::~BombaPlantaTest() {
}

void BombaPlantaTest::setUp() {
}

void BombaPlantaTest::tearDown() {
}

void BombaPlantaTest::testColisionarCon() {
    /*IOcupante* ocupante;
    BombaPlanta bombaPlanta;
    bombaPlanta.colisionarCon(ocupante);*/
   // if (true /*check result*/) {
        CPPUNIT_ASSERT(true);
  //  }
}

void BombaPlantaTest::testMover() {
   /* Coordenada* nueva_coord;
    BombaPlanta bombaPlanta;
    bombaPlanta.mover(nueva_coord);*/
  //  if (true /*check result*/) {
        CPPUNIT_ASSERT(true);
  //  }
}

void BombaPlantaTest::testSoltarEn() {
    /*Coordenada* coord;
    BombaPlanta bombaPlanta;
    bombaPlanta.soltarEn(coord);*/
    //if (true /*check result*/) {
        CPPUNIT_ASSERT(true);
    //}
}


void BombaPlantaTest::testSetYGetPosicion() {
    int x = 2;
    int y = 3;
    Coordenada coord = Coordenada(x,y);
    BombaPlanta bomba2 = BombaPlanta(1, coord, "arriba", 5);
    Coordenada result2 = bomba2.getPosicion();
    //fail if not true?
    CPPUNIT_ASSERT((result2.getX()) == x && (result2.getY() == y));
}


void BombaPlantaTest::testMoverYExplotarContraZombie() {
    Coordenada coord = Coordenada(1,1);
    BombaPlanta bomba = BombaPlanta(1, coord, "arriba", 5);
    Mapa mapa = Mapa(10);
    mapa.inicializar();
    mapa.ubicarElemento(&bomba, coord);
    Coordenada coord_zombie = Coordenada(1,6);
    ZombieVerde* zombie = new ZombieVerde();
    zombie->ubicar(coord_zombie);
    mapa.ubicarElemento(zombie, coord_zombie);
    while(!bomba.yaExploto()) {
        bomba.actuar(mapa);
    }
    CPPUNIT_ASSERT(!zombie->estaVivo());
    delete zombie;
    CPPUNIT_ASSERT(bomba.yaExploto());
}

void BombaPlantaTest::testExplotarPorBordeDeMapa() {
    Coordenada coord = Coordenada(1,1);
    BombaPlanta bomba = BombaPlanta(1, coord, "arriba", 5);
    Mapa mapa = Mapa(3);
    mapa.inicializar();
    mapa.ubicarElemento(&bomba, coord);
    int i = 0;
    while(!bomba.yaExploto()) {
        bomba.actuar(mapa);
        i++;
    }
    CPPUNIT_ASSERT(i == 2);
    CPPUNIT_ASSERT(bomba.yaExploto());
}

void BombaPlantaTest::testExplotarPorMaterial() {
    Coordenada coord = Coordenada(1,1);
    BombaPlanta bomba = BombaPlanta(1, coord, "arriba", 5);
    Mapa mapa = Mapa(10);
    mapa.inicializar();
    mapa.ubicarElemento(&bomba, coord);
    
    Caja* caja = new Caja();
    Coordenada coordMaterial = Coordenada(1,5);
    mapa.establecerMaterial(caja, coordMaterial);
    
    ZombieVerde* zombie = new ZombieVerde();
    Coordenada coordZombie = Coordenada(3,5);
    zombie->ubicar(coordZombie);
    mapa.ubicarElemento(zombie, coordZombie);
    
    int i = 0;
    while(!bomba.yaExploto()) {
        bomba.actuar(mapa);
        i++;
    }

    CPPUNIT_ASSERT(i == 4);
    CPPUNIT_ASSERT(caja->fueDestruido());
    CPPUNIT_ASSERT(bomba.yaExploto());
    CPPUNIT_ASSERT(!zombie->estaVivo());
    
    delete zombie;
    //delete caja;
}